Kotlin 的抽象工廠模式和 Java 版差不多,只差在 Get 和 Set 寫法不同,還有一些語法差異
假設我是補習班工廠,要產出工程師、設計師
interface MakeVocationalProduct {
    fun getName(name: String): String
}
interface CreateVocationalFactory {
    var createVocational: MakeVocationalProduct
}
3-1. 製造工程師
class MakeEngineerProduct : MakeVocationalProduct {
    override fun getName(name: String): String {
        return "工程師: $name"
    }
}
3-2. 製造設計師
class MakeDesignerProduct : MakeVocationalProduct {
    override fun getName(name: String): String {
        return "設計師: $name"
    }
}
4-1. 創造工程師工廠
class CreateEngineerFactory : CreateVocationalFactory {
    override var createVocational: MakeVocationalProduct
        get() = MakeEngineerProduct()
        set(value) {}
}
4-2. 創造設計師工廠
class CreateDesignerFactory : CreateVocationalFactory {
    override var createVocational: MakeVocationalProduct
        get() = MakeDesignerProduct();
        set(value) {}
}
val engineer: CreateVocationalFactory = CreateEngineerFactory()
val designer: CreateVocationalFactory = CreateDesignerFactory()
Log.d("${engineer.createVocational.getName("Andy")} / ${designer.createVocational.getName("AWD")}")
工程師: Andy / 設計師: AWD